import Vue from 'vue';
import App from './App';
import router from './router';
const ISDEV = process.env.NODE_ENV === 'development';

import qs from 'qs';
Vue.prototype.$qs = qs;
if (ISDEV) {
  console.log(
    '%c 项目中可用 qs（$qs.parse()/$qs.stringify()',
    'background:pink;'
  );
} //仅开发提示

import encryptionService from './utils/encryptionService';
// 将加密服务注册为Vue的原型方法，使其在所有组件中可用
Vue.prototype.$encryption = encryptionService;

import store from './Store';

import { axios, api } from './Axios';
Vue.prototype.$axios = axios;
Vue.prototype.$api = api;
import VueAxios from 'vue-axios';
Vue.use(VueAxios, axios);

import VantGreen from 'vant-green';

// import 'vant-green/lib/index.css';
// Vue.use(VantGreen);


import Vant from 'vant';
import 'vant/lib/index.css';

Vue.use(Vant);

import '@/assets/reset.css';

import Moment from 'moment';
import 'moment/locale/zh-cn';
Vue.prototype.$moment = Moment;
if (ISDEV) {
  console.log('%c 项目中可用 moment（$moment', 'background:pink;');
} //仅开发提示

import _ from 'lodash';
Vue.prototype._ = _;
if (ISDEV) {
  console.log('%c 项目中可用 lodash（_）', 'background:pink;');
} //仅开发提示

import storage from '@/assets/storage.js';

Vue.prototype.$getUrlArgs = storage.getUrlArgs;

import filter from './filter';
// 在 filter.js 文件定义常用的 filter 方法，
// 便于组件内按需引用并作用于 methods 内使用
// 并通过Vue.filter注册在模板使用
Object.keys(filter).forEach((key) => {
  Vue.filter(key, filter[key]);
});

if (ISDEV) {
  console.log('%c 项目中用crypto-js代替MD5已全局配置', 'background:pink;');
} //仅开发提示

import Mockjs from 'mockjs';
Vue.prototype.$mock = Mockjs;
if (ISDEV) {
  console.log('%c 项目中可用 mock（$mock）', 'background:pink;');
} //仅开发提示

// import VueTheMask from 'vue-the-mask';
// Vue.use(VueTheMask);

export const bus = new Vue(); //事件总线
// 组件中使用 bus.$emit('事件名',参数对象) 发布事件
// 另一个组件中使用 bus.$on('事件名', (参数对象) => {}) 订阅事件
export const busChat = new Vue(); //聊天室内事件线

Vue.config.productionTip = false;
/* eslint-disable no-new */

import clientUniqueIdPlugin from './plugins/clientUniqueId.js';
Vue.use(clientUniqueIdPlugin);

new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>',
});
const trigger = (el, type) => {
  const e = document.createEvent('HTMLEvents');
  e.initEvent(type, true, true);
  el.dispatchEvent(e);
};
Vue.directive('input-float', {
  bind: function(el, binding) {
    const input = el.getElementsByTagName('input')[0];
    let preg = /^\d*(\.?\d*)/g;
    if (parseInt(binding.value) > 0) {
      preg = new RegExp('^\\d*(\\.?\\d{0,' + binding.value + '})', 'g');
    }
    input.onkeyup = function() {
      input.value = input.value.toString().match(preg, '')[0] || null;
      trigger(input, 'input');
    };
    input.onblur = function() {
      input.value = input.value.toString().match(preg, '')[0] || null;
      trigger(input, 'input');
    };
  },
});
